package com.liuche.rpc.registry;

import com.liuche.rpc.config.RegistryConfig;
import com.liuche.rpc.model.ServiceMetaInfo;

import java.util.List;

/**
 * @author：liuche
 * @Date：2024年04月17日 22:55
 * @Description：注册中心（后续可以基于不同的中间件实现多个不同的注册中心，例如：zookeeper、etdc和redis等）
 */
public interface Registry {
    /**
     * 初始化
     *
     * @param registryConfig
     */
    void init(RegistryConfig registryConfig);

    /**
     * 注册服务（服务端）
     *
     * @param serviceMetaInfo
     */
    void register(ServiceMetaInfo serviceMetaInfo) throws Exception;

    /**
     * 注销服务（服务端）
     *
     * @param serviceMetaInfo
     */
    void unRegister(ServiceMetaInfo serviceMetaInfo);

    /**
     * 服务发现（获取某服务的所有节点，消费端）
     *
     * @param serviceKey 服务键名
     * @return
     */
    List<ServiceMetaInfo> serviceDiscovery(String serviceKey);

    /**
     * 服务销毁
     */
    void destroy();

    /**
     * 心跳检测机制
     */
    void heartBeat();

    /**
     * 缓存监听方法
     */
    void watch(String key);

}
